package com.northwind.servlets;
import com.northwind.beans.Categoria;
import com.northwind.beans.Producto;
import com.northwind.beans.Proveedor;
import com.northwind.dao.CategoriaDAO;
import com.northwind.dao.ProductoDAO;
import com.northwind.dao.ProveedorDAO;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ProductoServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    try {
        String accionStr=(request.getParameter("accion")==null?"3":request.getParameter("accion"));
        int accion=Integer.parseInt(accionStr);
        Producto producto;
        ProductoDAO productoDAO=new ProductoDAO();
        CategoriaDAO categoriaDAO=new CategoriaDAO();
        ProveedorDAO proveedorDAO=new ProveedorDAO();
        String pagina="";
        Logger.getLogger("Modificar!");
        switch (accion){
            case 1: //NUEVO
                producto=new Producto();
                request.setAttribute("listaCategoria", categoriaDAO.listarCategorias());
                request.setAttribute("listaProveedores", proveedorDAO.listarProveedores());
                request.setAttribute("producto", producto);
                pagina="/producto.jsp";
                break;
            case 2: //MODIFICAR
                
                int idProducto=Integer.parseInt(request.getParameter("idProducto"));
                producto=productoDAO.obtenerProducto(idProducto);
                request.setAttribute("listaCategoria", categoriaDAO.listarCategorias());
                request.setAttribute("listaProveedores", proveedorDAO.listarProveedores());
                request.setAttribute("producto", producto);
                pagina="/producto.jsp";
                break;
            case 3: //GUARDAR O ACTUALIZAR
                producto=new Producto();
                producto.setIdProducto(Integer.parseInt(request.getParameter("txtCodigo")));
                producto.setNombreProducto(request.getParameter("txtNombreProducto"));
           
//                producto.setProveedor(new Proveedor().setIdProveedor(Integer.parseInt(request.getParameter("ddlProveedor"))));
//                producto.setCategoria(new Categoria().setIdCategoria(Integer.parseInt(request.getParameter("ddlCategoria"))));
                
//                producto.getCategoria().setIdCategoria(Integer.parseInt(request.getParameter("ddlCategoria")));
//                producto.getProveedor().setIdProveedor(Integer.parseInt(request.getParameter("ddlProveedor")));
                
                Proveedor proveedor = new Proveedor();
                proveedor.setIdProveedor(Integer.parseInt(request.getParameter("ddlProveedor")));
                producto.setProveedor(proveedor);
                
                Categoria categoria = new Categoria();
                categoria.setIdCategoria(Integer.parseInt(request.getParameter("ddlCategoria")));
                producto.setCategoria(categoria);
                
                producto.setCantidadPorUnidad(request.getParameter("txtCantidadPorUnidad"));
                producto.setPrecio(Double.parseDouble(request.getParameter("txtPrecioUnitario")));
                producto.setUnidadesEnStock(Integer.parseInt(request.getParameter("txtStock")));
                if (producto.getIdProducto()==0){
                    //operacion de registro del producto
                    productoDAO.registrarProducto(producto);
                }else{
                    //actualización
                    productoDAO.actualizarProducto(producto, producto.getIdProducto());
                }
                pagina="/ListaProductoServlet";
                break;
            default:
                new UnsupportedOperationException("Operacion no definida");
        }
        RequestDispatcher rd = getServletContext().getRequestDispatcher(pagina);
        rd.forward(request, response);
    } catch (Exception ex) {
            ex.printStackTrace();
    }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
